<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script>
//			1.什么是constructor属性:在对象原型(_proto_)和构造函数内(prototype)原型对象里面都有一个属性constructor属性
//			2.作用:，当我们prototype原型对象地址改变时，它用来指回构造函数本身
			function star (name,age){
				this.uname=name;
				this.uage=age;
				this.sing=function(){
				console.log("我爱唱歌");
				}
				
			}
//			这种prototype.的方式是向原本的内存地址中添加方法。
//			star.prototype.sing=function(){
//				console.log("我爱唱歌")
//			}
//			我们可以给prototype赋值一个对象开辟一个新的对象内存,这样它就指向这个新的内存地址,我们这时候就需要用里面的constructor属性来指回原来的构造函数
//			而_proto_对象原型中的就是指向原型对象，所以我们一般只需要将原型对象中的constructor指回构造函数
			star.prototype={
//				由于改变了对象地址所以我们可以通过constructor属性来指回原来的构造函数，防止构造函数创建出来的对象共享不到原型对象中的方法
				constructor:star,
				sing:function(){
					console.log("唱歌");
			},
				eat:function(){
				console.log("吃");
			}
			}
			
			
			ldh =new star("刘德华",18);
			
			
			//---------------------------------------重           点----------------------------------------
			//实例对象中的对象原型中的constructor指向构造函数原型对象中的constructor，而不是指向构造函数原型对象中的对象原型中的constructor；
			//并且构造函数内原型对象中的constructor又指回构造函数
			console.log(star.prototype.__proto__.constructor==ldh.__proto__.constructor);//false
			console.log(star.prototype.constructor==ldh.__proto__.constructor);//true
			//那么构造函数中的原型对象中的对象原型有啥用呢，其实是指向上一层构造函数的原型对象
			
			ldh.eat();
		</script>
	</body>
</html>
